'''
try
   可能抛异常代码
except 异常类型
    抛出异常后执行
else 
    没有抛出异常执行
finally 
    始终执行

    
raise 抛出异常

常见异常类型：
ZeroDivisionError   除数为0
IndexError          索引越界
KeyError            字典key不存在
NameError           变量声明异常
SyntaxError         语法错误
ValueError          传值错误
'''
#-------------------------------------------------------
'''
函数
内置函数
    print() input()等
自定义函数
    定义：
        def 函数名(形参):
            return (可省略),可return多个值，返回为一个元组
    调用：
        函数名(实参)

传参方式：
 1. 位置传参：按形参顺序依次
 2. 指定参数名：传参时指定形参名 可乱序
 3. 默认值传参：定义时指定默认值，不传则有默认值
 4. 可变参数：
    1. 个数可变的位置参数 在形参前加* def func(*params)
        params此时是一个元组
    2. 个数可变的关键字参数 形参前加** def func(**params)
        params此时是一个字典 key是参数名 value是参数值
'''
def func1(*params):
    print(type(params))
    for item in params:
        print(item)

def func2(**params):
    print(type(params))
    for k,v in params.items():
        print(f"{k}=>{v}")

func1(11,22,33)
func2(name='你好',age='12')
# 或 在调用时解构
arr1 = [11,22,33]
arr2 = {'name':'你好','age':18}
func1(*arr1)
func2(**arr2)

'''
变量作用域
    全局作用域
        函数外部定义 或 函数内 global定义
        程序结束才结束生命周期
    局部作用域
        在函数中优先于全局作用域
        函数执行结束 结束生命周期
'''
'''
lambda表达式 匿名函数，只有一行方法体可简写
'''
s = lambda x,y:x+y

lst = [{'id':13,'name':'张三'},{'id':1,'name':'李四'},{'id':32,'name':'王五'},]
lst.sort(key=lambda x:x.get('id'),reverse=True)
print(lst)

'''
常用内置函数
    类型转换
        bool(obj)       获取对象的bool值
        str(obj)        转字符串
        int(x)          x转int
        float(x)        x转float
        list(seq)       序列转列表
        tuple(seq)      序列转元组
        set(seq)        序列转集合
    数学函数
        abs(x)          x的绝对值
        divmod(x,y)     x与y的商和余数
        max(seq)        seq的最大值
        min(seq)        seq的最小值
        sum(iter)       对可迭代对象求和
        pow(x,y)        x的y次幂
        round(x,y)      x保留d位小数 四舍五入
    迭代器操作函数
        sorted(iter)        对可迭代对象排序
        reversed(seq)       反转序列 返回新对象
        zip(iter1,iter2)    两个迭代器对象打包成一个可迭代的zip对象
        enumerate(iter)     根据iter对象创建一个enumerate对象
        all(iter)           iter所有元素值是否都为True
        any(iter)           iter所有元素值是否都为False
        next(iter)          获取迭代器的下一个元素
        filter(func,iter)   条件指定过滤序列 返回一个iter对象
        map(function,iter)  条件指定操作，返回一个iter对象
    内置函数
        format(value,format_spec)       value 以format_spec格式显示
        len(s)                          获取s长度或s的个数
        id(obj)                         获取对象的内存地址
        type(x)                         获取x的数据类型
        eval(s)                         执行s字符串表示的python代码
'''